package com.mdd.front.service.order;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.order.Order;
import com.mdd.common.enums.OrderEnum;
import com.mdd.common.utils.TimeUtil;
import com.mdd.front.validate.OrderParam;
import com.mdd.front.validate.PageParam;
import com.mdd.front.vo.order.OrderDetailVo;
import com.mdd.front.vo.order.OrderListVo;
import org.springframework.util.Assert;

import java.util.Map;

/**
 * 订单服务接口类
 * @author panweiliang
 */
public interface IOrderService {

    /**
     * 订单列表
     *
     * @author panweiliang
     * @param pageParam 分页参数
     * @param params 搜索参数
     * @return PageResult<OrderListVo>
     */
    PageResult<OrderListVo> list(PageParam pageParam, Map<String, String> params);


    /**
     * 订单详情
     *
     * @author panweiliang
     * @param id 主键ID
     * @param userId 用户id
     * @return OrderDetailVo
     */
    OrderDetailVo detail(Integer id, Integer userId);

    /**
     * 根据id获取订单数据
     *
     * @author panweiliang
     * @param id 主键ID
     * @return Order
     */
    Order getById(Integer id);

    /**
     * 更改订单单号
     * @param id
     * @return
     */
    Order updateSn(Integer id);

    /**
     * 订单新增
     *
     * @author panweiliang
     * @param orderParam 参数
     */
    OrderDetailVo add(OrderParam orderParam);

    /**
     * 讲订单状态改为已支付
     * @param outTradeNo
     * @param transactionId
     */
    boolean updateOrderStatusToPaid(String outTradeNo, String transactionId) throws WxPayException;

    /**
     * 讲订单状态改为已支付
     * @param orderId
     */
    boolean updateOrderPayStatusToPaid(Integer orderId) throws WxPayException;


    /**
     * 取消订单
     *
     * @author panweiliang
     * @param id 主键ID
     */
    void cancel(Integer id);

    /**
     * 订单删除
     *
     * @author panweiliang
     * @param id 主键ID
     */
    void del(Integer id);

}
